package entity

import (
	"errors"
	"fmt"
	"math"
	"time"

	"gorm.io/gorm"
	"shqsoft.cn/pas3ui/base"
)

//ShCompTydq 同业定期台账导入
type ShCompTydq struct {
	ID     int        `gorm:"AUTO_INCREMENT;primary_key;column:ID"`
	DTID   time.Time  `gorm:"column:DTID"`   //导入日期
	YWPZ   string     `gorm:"column:YWPZ"`   //业务品种
	ACNO   string     `gorm:"column:ACNO"`   //账号
	BANO   string     `gorm:"column:BANO"`   //子账户
	JYDS   string     `gorm:"column:JYDS"`   //交易对手
	HTJE   float64    `gorm:"column:HTJE"`   //合同金额
	VLDT   *time.Time `gorm:"column:VLDT"`   //起息日
	MODT   *time.Time `gorm:"column:MODT"`   //到期日
	HTQX   int        `gorm:"column:HTQX"`   //合同期限
	INRT   float64    `gorm:"column:INRT"`   //利率
	FXFS   string     `gorm:"column:FXFS"`   //付息方式
	ACBL   float64    `gorm:"column:ACBL"`   //余额
	JXVLAT string     `gorm:"column:JXVLAT"` //计息起息日
	JXMODT string     `gorm:"column:JXMODT"` //计息到期日
	ZXLL   float64    `gorm:"column:ZXLL"`   //执行利率
	FTPCK  string     `gorm:"column:FTPCK"`  //FTP参考
	FTPZ   float64    `gorm:"column:FTPZ"`   //FTP值
	FTPLC  float64    `gorm:"column:FTPLC"`  //FTP利差
	QX1    int        `gorm:"column:QX1"`    //1月期限
	LR1    float64    `gorm:"column:LR1"`    //1月利润
	JFJS   float64    `gorm:"column:JFJS"`   //绩费计算
	EMID1  *int       `gorm:"column:EMID1"`
	GH1    string     `gorm:"column:GH1"`   //工号1
	KHJL1  string     `gorm:"column:KHJL1"` //客户经理1
	ZB1    float64    `gorm:"column:ZB1"`   //占比1
	EMID2  *int       `gorm:"column:EMID2"`
	GH2    string     `gorm:"column:GH2"`   //工号2
	KHJL2  string     `gorm:"column:KHJL2"` //客户经理2
	ZB2    float64    `gorm:"column:ZB2"`   //占比2
	EMID3  *int       `gorm:"column:EMID3"`
	GH3    string     `gorm:"column:GH3"`   //工号3
	KHJL3  string     `gorm:"column:KHJL3"` //客户经理3
	ZB3    float64    `gorm:"column:ZB3"`   //占比3
	EMID4  *int       `gorm:"column:EMID4"`
	GH4    string     `gorm:"column:GH4"`   //工号4
	KHJL4  string     `gorm:"column:KHJL4"` //客户经理4
	ZB4    float64    `gorm:"column:ZB4"`   //占比4
	EMID5  *int       `gorm:"column:EMID5"`
	GH5    string     `gorm:"column:GH5"`   //工号5
	KHJL5  string     `gorm:"column:KHJL5"` //客户经理5
	ZB5    float64    `gorm:"column:ZB5"`   //占比5
}

//TableName
func (ShCompTydq) TableName() string {
	return "SH_COMP_TYDQ"
}

// BeforeCreate
func (u *ShCompTydq) BeforeCreate(tx *gorm.DB) (err error) {
	sum := u.ZB1 + u.ZB2 + u.ZB3 + u.ZB4 + u.ZB5
	if math.Abs(sum-1) > 0.001 {
		err = errors.New("占比之和必须为100%")
		return
	}
	strSql := `SELECT "ID" FROM "T_SysUser" WHERE "SysUserID" =?`
	tx.Raw(strSql, u.GH1).Row().Scan(&u.EMID1)
	if u.EMID1 == nil {
		err = fmt.Errorf("工号1:%s在系统中没有找到！", u.GH1)
		return
	}
	if u.ZB2 > 0 {
		tx.Raw(strSql, u.GH2).Row().Scan(&u.EMID2)
		if u.EMID2 == nil {
			err = fmt.Errorf("工号2:%s在系统中没有找到！", u.GH2)
			return
		}
	}
	if u.ZB3 > 0 {
		tx.Raw(strSql, u.GH3).Row().Scan(&u.EMID3)
		if u.EMID3 == nil {
			err = fmt.Errorf("工号3:%s在系统中没有找到！", u.GH3)
			return
		}
	}
	if u.ZB4 > 0 {
		tx.Raw(strSql, u.GH4).Row().Scan(&u.EMID4)
		if u.EMID4 == nil {
			err = fmt.Errorf("工号4:%s在系统中没有找到！", u.GH4)
			return
		}
	}
	if u.ZB5 > 0 {
		tx.Raw(strSql, u.GH5).Row().Scan(&u.EMID5)
		if u.EMID5 == nil {
			err = fmt.Errorf("工号5:%s在系统中没有找到！", u.GH5)
			return
		}
	}
	return
}

//ShCompTydqEF 返回结构体
func ShCompTydqEF() base.EntityFunc {
	return func() interface{} {
		entity := ShCompTydq{}
		return &entity
	}
}

//ShCompTydqESF 返回结构体数组
func ShCompTydqESF() base.EntitiesFunc {
	return func() interface{} {
		var entities []ShCompTydq
		return &entities
	}
}

func init() {
	base.DaoPoolObj.Put("ShCompTydq", base.NewDefaultDao(ShCompTydqEF(), ShCompTydqESF(), nil, "my"))
}
